#ifndef TD_SDLCURSOR_H_
#define TD_SDLCURSOR_H_


/************************************************************************/
/* SDL                                                                  */
/************************************************************************/
#include "SDL/SDL.h"
/************************************************************************/
/* PROJECT                                                              */
/************************************************************************/

/************************************************************************/
/* Core                                                                 */
/************************************************************************/
#include "Core/Singleton.h"

using namespace TD_Core;
namespace TD_GUI {

	typedef enum {
		arrowCursor,
		handCursor,
		invalidCursor
	} cursorTypes;


	class SDLCursor : public Singleton<SDLCursor> {
		
		/************************************************************************/
		/* Default definitions                                                  */
		/************************************************************************/
		/**Cursors:*/
		static const char *hand[];
		static const char *arrow[];
		static const char *war3Orc[];

		static SDL_Cursor *m_pCursor;

		static cursorTypes m_currCursor;
		
		/************************************************************************/
		/* Private functions                                                    */
		/************************************************************************/
		static SDL_Cursor *createCursor(const char *image[]);
	public:

		/************************************************************************/
		/* ctors and dtors					                                    */
		/************************************************************************/

		//Default constructor
		explicit SDLCursor();

		//Copy constructor
		explicit SDLCursor(const SDLCursor &rhs);

		//Assignment constructor
		SDLCursor& operator=(const SDLCursor &rhs);

		//Initialization constructor
		explicit SDLCursor(cursorTypes cursorType);

		//Destructor
		~SDLCursor();

		/************************************************************************/
		/* Functionalities                                                      */
		/************************************************************************/
		static void setCursor(cursorTypes cursorType);

		static void hideCursor(bool hide);

	};
}
#endif